<?php

/**
 * Una secuencia de elementos sin repetidos
 * 
 * El orden de los elementos es el dado al agregarlos o quitarlos
 */
interface Lite_Collection_Sequence extends Lite_Collection_Set {
	
	/**
	 * Agrega un elemento a la coleccion en la posicion <code>$index</code>
	 * 
	 * @param int $index
	 * @param mixed $element
	 * 
	 * @throws Lite_Exception_IndexOutOfBound $index no es una posicion valida
	 */
	function addAt($index, $element);
	
	/**
	 * Retorna el elemento de la posicion <code>$index</code>
	 * 
	 * @param int $index
	 * @return mixed
	 * 
	 * @throws Lite_Exception_IndexOutOfBound $index no es una posicion valida
	 */
	function getAt($index);
	
	/**
	 * Elimina el elemento de la posicion <code>$index</code>
	 * 
	 * @param int $index
	 * 
	 * @throws Lite_Exception_IndexOutOfBound $index no es una posicion valida
	 */
	function removeAt($index);
	
	/**
	 * Retorna la posicion del elemento en la secuencia
	 * 
	 * @param mixed $element
	 * @return int	un valor positivo con la posicion del elemento 
	 * 				-1 si no pertenece a la secuencia
	 */
	function indexOf($element);
}